Socket
Socket
Sign inDemoInstall

@sveltekit-i18n/parser-default

Package Overview
Dependencies
Maintainers
1
Versions
23
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@sveltekit-i18n/parser-default

Default parser for sveltekit-i18n library.


Version published
Weekly downloads
9.8K
increased by7.41%
Maintainers
1
Weekly downloads
 
Created
Source

npm version Tests Netlify Status

@sveltekit-i18n/parser-default

This parser is ment be used together with @sveltekit-i18n/base, but can be used with other libraries as well. In fact, it does not require Svelte or SvelteKit.

Preview

You can see this parser in action on Netlify.

Options

modifierDefaults?: Modifier.Defaults

You can specify default values for built-in modifiers using this prop. Configuration is available for these modifiers:

number?: Intl.NumberFormatOptions
date?: Intl.DateTimeFormatOptions
ago?: Intl.RelativeTimeFormatOptions & { format?: Intl.RelativeTimeFormatUnit | 'auto' } currency?: Intl.NumberFormatOptions & { ratio?: number }

customModifiers?: Record<string, Modifier.T>

You can use this property to include your own set of modifiers.

For example custom modifier eqAbs...

const customModifiers = {
  eqAbs: ({ value, options, defaultValue, locale }) => options.find(({ key }) => Math.abs(+key) === Math.abs(value))?.value || defaultValue
}

...can be used in the definitions like this:

{{placeholder:eqAbs; 10:Value is absolutely equal to ten.; default:Value is not absolutely equal to ten.;}}

Read more about Modifiers.

Syntax

Every placeholder or modifier starts with {{ and ends with }} and can be included in your translations like this:

{
  "simple_prop": "Some value",
  "module": {
    "placeholder": "Title with {{placeholder}}.",
    "placeholder_with_default_value": "{{placeholder; default:Default value;}}.",
    "modifier": "{{gender; female:She; male:He;}} has a dog.",
    "combined": "You have {{number:gt; 0:{{number}} new {{number; 1:message; default:messages;}}!; default:no messages.;}}"
  }
} 

Placeholders

Placeholders work as a connection between static translations and dynamic content. They are usually replaced by dynamic values, which are the same for all language mutations.

Placeholder notation looks like this:

{{placeholder}}

<!-- or: -->
{{placeholder;}}

You can also use default value. This value is used in case there is no appropriate value in translation payload.

{{placeholder; default:This is a default value;}}

The default value can be also set dynamically using the translation payload in your .svelte file. For example:

$t(`error.${code}`, { default: $t('error.default') });

This value is used in case no default value is defined within the placeholder definition itself. For more, see Dynamic default section in parser-default example app.

Modifiers

Modifiers don't represent the payload value directly, but they can use it for further calculations. Currently, these modifiers are in place:

eq – input value is equal to the value in your definition (string comparison, case insensitive).
ne – input value is not equal to the value in your definition (string comparison, case insensitive).
lt – input value is lower than the value in your definition.
lte – input value is lower than or equal to the value in your definition.
gt – input value is greater than the value in your definition.
gte – input value is greater than or equal to the value in your definition.
number – input value is converted to locale formatted number string.
date – input value is converted to locale date string.
ago – input value is converted to locale relative date string.
currency – input value is converted to locale relative currency string.

Each modifier returns a string value based on these input properties:

value: any – interpolated placeholder value
options: {key: string; value: string;}[] – parsed interpolation options from the definition
props?: any – modifier properties
defaultValue?: string – default value
locale?: string – current locale

When placeholder value is not matched and you don't specify the default value, modifier returns an empty string.

Modifier notation looks like this:

{{placeholder:modifier; placeholderVal1:Interpolation value 1; placeholderVal2:Interpolation value 2; ... ; default:Default value;}}

In case you don't specify the modifier, but interpolation options are set, eq modifier is used by default:

{{placeholder; placeholder_value:Interpolation value;}}

For example this definition...

// `content` translation definition
{
  "modifier_date": "{{value:date;}}"
}

...you can execute like this:

// svelte file

$t('content.modifier_date', { value: Date.now() }, { timeStyle: 'full' });

// $t(`key`, ...params: [payload, props]);

You are allowed to use nested placeholders and modifiers within your modifier definition or include your own modifiers in Options! See parser-default example.

Note that ;, :, { and } characters are used as placeholder identifiers and separators, so you shouldn't use them within your definition keys and values. You should use their escaped form insead (\\;, \\:, \\{ or \\}).

More info

Examples
Changelog

Issues

If you are facing issues with this parser, create a ticket here.

Keywords

FAQs

Package last updated on 12 Jul 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc